// 真题描述：给定一个排序链表，删除所有含有重复数字的结点，只保留原始链表中 没有重复出现的数字。
// 输入: 1->2->3->3->4->4->5
// 输出: 1->2->5
// 示例 2:
// 输入: 1->1->1->2->3
// 输出: 2->3

function ListNode (val) {
    this.val = val || ''
    this.next = null
}

/**
 *
 * @param head - 链表的头节点
 * @returns {*}
 */
const deleteDuplicates = function (head) {
    // 极端情况： 0个或者 节点，则不会重复，直接返回
    if(!head || !head.next) {
        return head
    }

    // 设置一个假的节点作为头节点的 前驱节点
    let dummy = new ListNode()
    // dummy节点永远指向头节点
    dummy.next = head

    // cur 从dummy 开始遍历
    let cur = dummy

    // 当dummy后面有至少两个节点的时候
    while( cur && cur.next.next) {
        // 比较两个节点
        if(cur.next.val === cur.next.next.val) {
            // 两个节点是否重复
            // 若重复 则记录重复的值 并判断后面的节点是否也重复
            let val = cur.next.val
            while(cur.next && cur.next.val === val) {
                cur.next = cur.next.next
            }
        } else {
            // 若不重复
            cur = cur.next
        }
    }
    // 返回链表的起始终点
    return dummy.next

}
